#ifndef ENUMDEVICES_H
#define ENUMDEVICES_H

#include "DriverStruct.h"


/**
 * @brief EnumDevices
 * @param pFilter
 * @param flags
 * @param pDevRoutine
 * @param pEnumParams
 * @return
 */
int EnumDevices(
    DeviceEnumFilter pFilter,
    DWORD flags,
    DeviceRoutine pDevRoutine,
    DeviceEnumParams* pEnumParams);

/**
 * @brief 枚举设备
 * @param pFilter 设备枚举过滤器
 * @param pDevProperties 设备属性指针
 * @param pDevCallBack 设备回调函数
 * @param pDevCallBackParam 回调函数参数
 * @return 枚举到的设备数量，失败返回负数
 */
int EnumDevices(
    // 入参是设备的 hardwareId 字符串
    // 返回 true 表示该设备需要参与后续处理
    // 例如代码中的 lambda 用来仅选择 com0com 相关的端口类设备
    DeviceEnumFilter pFilter,
    // 枚举的“范围/约束”对象
    // 例如已设置的 DeviceId、Service 等，用来限定枚举的设备集合
    ConstDevicePropertiesPtr pDevProperties,
    // 改动是否需要重启
    bool *pRebootRequired,
    // 对每个通过过滤的设备执行的回调
    // 典型签名会提供当前设备的句柄与属性, 回调里可读取注册表属性（如 SPDRP_PHYSICAL_DEVICE_OBJECT_NAME ）并将解析结果写回到 pDevCallBackParam
    DeviceCallback pDevCallBack,
    // 用户自定义的回调参数
    // 这里传入的是 PortParameters* 。回调通过它把枚举到的真实端口名等信息回填到调用方的参数对象中
    void *pDevCallBackParam);


#endif // ENUMDEVICES_H
